package com.podium.web.system.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.podium.web.system.entity.SysMenu;

import java.util.List;
import java.util.Set;

/**
 * @author 邵文泽
 * @description 系统菜单
 * @date Tue Apr 29 09:58:56 CST 2025
 */
public interface SysMenuService {

    /**
     * 分页查询
     *
     * @param page          分页对象
     * @param sysMenu  系统菜单信息
     * @return 系统菜单列表
     */
    IPage<SysMenu> page(Page<SysMenu> page, SysMenu sysMenu);

    /**
     * 查询列表
     *
     * @param sysMenu  系统菜单信息
     * @return 系统菜单列表
     */
    List<SysMenu> list(SysMenu sysMenu);

    /**
     * 查询树形列表
     *
     * @param sysMenu  系统菜单信息
     * @return 系统菜单列表
     */
    List<SysMenu> treeList(SysMenu sysMenu);

    /**
     * 根据id查询系统菜单信息
     *
     * @param id 系统菜单信息ID
     * @return SysMenu
     */
    SysMenu getById(Long id);

    /**
     * 保存系统菜单信息
     *
     * @param sysMenu 系统菜单信息
     * @return 是否保存成功
     */
    boolean save(SysMenu sysMenu);

    /**
     * 根据id更新系统菜单信息
     *
     * @param sysMenu 系统菜单信息
     * @return 是否更新成功
     */
    boolean updateById(SysMenu sysMenu);

    /**
     * 根据id删除系统菜单信息
     *
     * @param id 标识
     */
    void removeById(Long id);

    /**
     * 根据id列表查询系统菜单信息
     *
     * @param menuIds 菜单id列表
     * @return 系统菜单列表
     */
    List<SysMenu> listByIds(Set<Long> menuIds);

    /**
     * 根据用户id查询用户菜单信息
     *
     * @param userId 用户id
     * @return 系统菜单列表
     */
    List<SysMenu> getByUserMenus(Long userId);
}
